import { defineStore } from 'pinia'
import { ref, computed } from 'vue'

/**
 * 模板状态管理Store
 * 统一管理模板的收藏状态、评分等，确保不同区域的状态同步
 */
export const useTemplateStore = defineStore('template', () => {
  // 模板收藏状态映射 { templateId: boolean }
  const favoriteStates = ref(new Map())
  
  // 模板评分状态映射 { templateId: { rating: number, ratingCount: number } }
  const ratingStates = ref(new Map())

  /**
   * 设置模板收藏状态
   * @param {number} templateId - 模板ID
   * @param {boolean} isFavorited - 是否收藏
   */
  const setFavoriteState = (templateId, isFavorited) => {
    favoriteStates.value.set(templateId, isFavorited)
  }

  /**
   * 获取模板收藏状态
   * @param {number} templateId - 模板ID
   * @returns {boolean} 是否收藏
   */
  const getFavoriteState = (templateId) => {
    return favoriteStates.value.get(templateId) || false
  }

  /**
   * 切换模板收藏状态
   * @param {number} templateId - 模板ID
   * @returns {boolean} 新的收藏状态
   */
  const toggleFavoriteState = (templateId) => {
    const currentState = getFavoriteState(templateId)
    const newState = !currentState
    setFavoriteState(templateId, newState)
    return newState
  }

  /**
   * 设置模板评分状态
   * @param {number} templateId - 模板ID
   * @param {number} rating - 评分
   * @param {number} ratingCount - 评分数量
   */
  const setRatingState = (templateId, rating, ratingCount) => {
    ratingStates.value.set(templateId, { rating, ratingCount })
  }

  /**
   * 获取模板评分状态
   * @param {number} templateId - 模板ID
   * @returns {object} 评分信息
   */
  const getRatingState = (templateId) => {
    return ratingStates.value.get(templateId) || { rating: 0, ratingCount: 0 }
  }

  /**
   * 批量设置模板状态（用于初始化）
   * @param {Array} templates - 模板列表
   */
  const batchSetTemplateStates = (templates) => {
    templates.forEach(template => {
      if (template.isFavorited !== undefined) {
        setFavoriteState(template.id, template.isFavorited)
      }
      if (template.rating !== undefined && template.ratingCount !== undefined) {
        setRatingState(template.id, template.rating, template.ratingCount)
      }
    })
  }

  /**
   * 更新模板对象的状态（用于同步状态到模板对象）
   * @param {object} template - 模板对象
   */
  const syncTemplateState = (template) => {
    if (template && template.id) {
      template.isFavorited = getFavoriteState(template.id)
      const ratingState = getRatingState(template.id)
      template.rating = ratingState.rating
      template.ratingCount = ratingState.ratingCount
    }
  }

  /**
   * 批量同步模板状态
   * @param {Array} templates - 模板列表
   */
  const batchSyncTemplateStates = (templates) => {
    templates.forEach(template => {
      syncTemplateState(template)
    })
  }

  /**
   * 清空所有状态
   */
  const clearAllStates = () => {
    favoriteStates.value.clear()
    ratingStates.value.clear()
  }

  return {
    // 状态
    favoriteStates: computed(() => favoriteStates.value),
    ratingStates: computed(() => ratingStates.value),
    
    // 收藏相关方法
    setFavoriteState,
    getFavoriteState,
    toggleFavoriteState,
    
    // 评分相关方法
    setRatingState,
    getRatingState,
    
    // 批量操作方法
    batchSetTemplateStates,
    syncTemplateState,
    batchSyncTemplateStates,
    
    // 清理方法
    clearAllStates
  }
})
